[ComVisible(false)]
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("0000000A-0000-0000-C000-000000000046")]
public interface ILockBytes
{
void ReadAt(long ulOffset, System.IntPtr pv, int cb, out UIntPtr pcbRead);
void WriteAt(long ulOffset, System.IntPtr pv, int cb, out UIntPtr pcbWritten);
void Flush();
void SetSize(long cb);
void LockRegion(long libOffset, long cb, int dwLockType);
void UnlockRegion(long libOffset, long cb, int dwLockType);
void Stat(ref System.Runtime.InteropServices.STATSTG pstatstg, int grfStatFlag);
}
<ComImport> _
<Guid("0000000A-0000-0000-C000-000000000046")> _
'TODO: Insert <InterfaceType(ComInterfaceType.InterfaceIsIUnknown)> _ if this doesn't derive from IDispatch
Interface ILockBytes
TODO
End Interface
None.
// read a chunk from the ILockBytes object
public int ReadAt(long offset, byte[] buffer, int bufferSize)
{
IntPtr pv = Marshal.AllocHGlobal(bufferSize);
UIntPtr pcbRead;
((ILockBytes)comPtr).ReadAt(offset, pv, bufferSize, out pcbRead);
int length = (int)pcbRead.ToUInt32();
Marshal.Copy(pv, buffer, 0, length);
Marshal.FreeHGlobal(pv);
return length;
}